package com.github.dzwicker.stjs.gradle;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.file.SourceDirectorySet;
import org.gradle.api.logging.Logger;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.plugins.WarPlugin;
import org.gradle.api.tasks.SourceSet;
import java.io.File;
@SuppressWarnings("UnusedDeclaration")
public class StJsPlugin implements Plugin<Project> {
@Override
public void apply(final Project project) {
boolean javaPlugin = project.getPlugins().hasPlugin(JavaPlugin.class);
boolean warPlugin = project.getPlugins().hasPlugin(WarPlugin.class);
final Logger logger = project.getLogger();
if (!(javaPlugin && warPlugin)) {
logger.error("st-js plugin can only be applied if jar or war plugin is applied, too!");
throw new IllegalStateException("st-js plugin can only be applied if jar or war plugin is applied, too!");
}
final JavaPluginConvention javaPluginConvention = project.getConvention().getPlugin(JavaPluginConvention.class);
final SourceSet main = javaPluginConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
final SourceDirectorySet allJava = main.getAllJava();
if (allJava.getSrcDirs().size() != 1) {
throw new IllegalStateException("Only a single source directory is supported!");
}
final GenerateStJsTask task = project.getTasks().create("stjs", GenerateStJsTask.class);
task.setClasspath(
main.getCompileClasspath()
);
task.setWar(warPlugin);
File generatedSourcesDirectory;
if (warPlugin) {
generatedSourcesDirectory = new File(project.getBuildDir(), "stjs");
project.getTasks().getByPath(WarPlugin.WAR_TASK_NAME).dependsOn(task);
} else {
generatedSourcesDirectory = main.getOutput().getClassesDir();
project.getTasks().getByPath(JavaPlugin.JAR_TASK_NAME).dependsOn(task);
}
task.setGeneratedSourcesDirectory(generatedSourcesDirectory);
task.setCompileSourceRoots(allJava);
task.setOutput(main.getOutput());
}
}